{
GdkSurface *surface;
GdkKeyEvent *key_event;
+ GdkEventType event_type;
surface = gdk_event_get_surface (event);
if (!surface->parent)
return NULL;
+ event_type = gdk_event_get_event_type (event);
+ if (event_type != GDK_KEY_PRESS &&
+ event_type != GDK_KEY_RELEASE)
+ return NULL;
+
while (surface->parent)
surface = surface->parent;
case GDK_DROP_START:
return TRUE;
+ case GDK_GRAB_BROKEN:
+ return gdk_device_get_source (gdk_event_get_device (event)) != GDK_SOURCE_KEYBOARD;
+
default:
return FALSE;
}
case GDK_KEY_RELEASE:
return TRUE;
break;
+ case GDK_GRAB_BROKEN:
+ return gdk_device_get_source (gdk_event_get_device (event)) == GDK_SOURCE_KEYBOARD;
default:
return FALSE;
}
case GDK_TOUCHPAD_PINCH:
case GDK_TOUCHPAD_SWIPE:
break;
+ case GDK_GRAB_BROKEN:
+ target = gtk_window_lookup_effective_pointer_focus_widget (toplevel,
+ device,
+ sequence);
+ break;
default:
g_assert_not_reached ();
}
break;
case GDK_FOCUS_CHANGE:
- case GDK_GRAB_BROKEN:
if (!_gtk_widget_captured_event (target_widget, event, target_widget))
gtk_widget_event (target_widget, event, target_widget);
break;
case GDK_PAD_RING:
case GDK_PAD_STRIP:
case GDK_PAD_GROUP_MODE:
+ case GDK_GRAB_BROKEN:
gtk_propagate_event (grab_widget, event);
break;